package com.ren.fileuploadanddownload.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/*
        自定义的拦截器类,springboot2.x中通过实现HandlerInterceptor完成拦截器类的设计，且允许空的重载
        值得注意的是拦截器只是拦截controller的请求，不能拦截静态资源和页面的相关请求,
        而之所以再拦截器的配置类中排除样式、脚本、图片等资源文件，是因为虽然可以直接访问静态资源不会拦截，
        但了解拦截器的原理:发起请求-->拦截器-->控制器--->拦截器
        所以如果不排除样式、脚本、图片等资源文件，
        你是可以通过直接访问静态资源目录查看静态资源，但你控制器中用到的静态资源内容都会被拦截(典型的情况之一就是页面的css样式失效)
*/

public class LoginInterceptor implements HandlerInterceptor {
    //预先处理
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse
            response, Object o) throws Exception {
        if (request.getSession().getAttribute("user") == null) {
            //未登录就跳转到错误页面
            request.getRequestDispatcher("/error").forward(request,response);
            return false;
            }
            return true;//返回true 放行 返回false阻止
    }
    //2.请求过程中处理  controller执行之后的操作
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse
            response, Object o, ModelAndView modelAndView) throws Exception {

    }
    //3.最终处理
    @Override
    public void afterCompletion(HttpServletRequest request,
                                HttpServletResponse response, Object o, Exception e) throws Exception {

    }


}
